package client.gui;

import javax.swing.JFrame;
import javax.swing.JPanel;

import client.controlleur.Controlleur;

/**
 * defini les classes a implementer pour l'affichage
 */
@SuppressWarnings("serial")
public abstract class IAffichageClient extends JPanel {
	/**
	 * est la classe parente
	 */
	public JFrame parent = null;

	/**
	 * permet de savoir quelle chaise a choisi le joueur pour s'asseoir
	 * 
	 * @param no
	 *            est le no de la chaise
	 */
	public abstract void chaiseChoisi(int no);

	/**
	 * affiche un message d'erreur a l'ecran
	 * 
	 * @param erreur
	 *            est la description de l'erreur
	 * @param titre
	 *            est le titre de la boite de dialogue
	 */
	public abstract void messageErreur(String erreur, String titre);

	/**
	 * permet de changer l'affichage
	 * 
	 * @param choix
	 *            est la fenetre a afficher
	 */
	public abstract void choixAffichage(int choix);

	/**
	 * permet de vider la table
	 */
	public abstract void resetTable();

	/**
	 * permet d'ajouter une ligne a la liste des tables
	 * 
	 * @param ligne
	 *            est la ligne a ajouter
	 */
	public abstract void ajoutLigneDansTable(String[] ligne);

	/**
	 * permet de savoir quel est le titre de la page si on est dans une fenetre
	 * 
	 * @return le tire de la fenetre
	 */
	public abstract String getTitle();

	/**
	 * permet de mettre un titre a la fenetre si on est dans une fenetre
	 * 
	 * @param title
	 *            est le titre
	 */
	public abstract void setTitle(String title);

	/**
	 * permet de modifier le solde du client et mettre a jour le slider
	 * 
	 * @param solde
	 *            est le nouveau solde
	 */
	public abstract void setSolde(double solde);

	/**
	 * permet de modifier le montant de la derniere relance et mettre a jour le
	 * slider
	 * 
	 * @param relance
	 *            est le nouveau montant
	 */
	public abstract void setMontantDerniereRelance(double relance);

	/**
	 * permet de mettre les infos du joueur
	 * 
	 * @param NoChaise
	 *            est le No de la chaise
	 * 
	 * @param nom
	 *            est le pseudo du joueur(nom a "" pour liberer la chaise)
	 * @param montant
	 *            est l'argent qu'il a
	 */
	public abstract void setChaiseInfos(int NoChaise, String nomJoueur,
			double montant);

	/**
	 * permet de pouvoir choisir une chaise
	 */
	public abstract void setChoixChaise();

	/**
	 * permet pouvoir choisir une chaise
	 * 
	 * @param choix
	 *            est true pour pouvoir choisir une chaise
	 */
	public abstract void setChoixChaise(boolean choix);

	/**
	 * permet de mettre sur le joueur l'action faite
	 * 
	 * @param NoChaise
	 *            est le no du joueur
	 * @param action
	 *            est l'action a afficher
	 */
	public abstract void setAction(int NoChaise, String action);

	/**
	 * permet d'afficher les cartes du joueur
	 * 
	 * @param carte1
	 *            est le nom de la 1ere carte
	 * @param carte2
	 *            est le nom de la 2emme carte
	 */
	public abstract void setCartesJoueur(String carte1, String carte2);

	/**
	 * permet d'afficher les cartes d'un joueur
	 * 
	 * @param NoJoueur
	 *            est le joueur en question
	 * @param carte1
	 *            est le nom de la carte 1
	 * @param carte2
	 *            est le nom de la carte 2
	 */
	public abstract void setCartesJoueurAutomatique(int NoJoueur,
			String carte1, String carte2);

	/**
	 * permet de donner la main au joueur
	 * 
	 * @param joue
	 *            active les boutons de jeu
	 * @param checkActif
	 *            permet d'activer separement le bouton check quand il est
	 *            utilisable
	 * @param relanceActif
	 *            permet d'activer separement le bouton relance quand il est
	 *            utilisable
	 */
	public abstract void JoueurJoue(boolean joue, boolean checkActif,
			boolean relanceActif);

	/**
	 * permet de montrer le flop
	 * 
	 * @param carte1
	 *            est le nom de la 1ere carte
	 * @param carte2
	 *            est le nom de la 2emme carte
	 * @param carte3
	 *            est le nom de la 3emme carte
	 */
	public abstract void setFlop(String carte1, String carte2, String carte3);

	/**
	 * permet de montrer la turn
	 * 
	 * @param carte4
	 *            est le nom de la 4emme carte
	 */
	public abstract void setTurn(String carte4);

	/**
	 * permet de montrer la river
	 * 
	 * @param carte5
	 *            est le nom de la 5emme carte
	 */
	public abstract void setRiver(String carte5);

	/**
	 * permet d'afficher le jeton du dealer devant une chaise
	 * 
	 * @param NoChaise
	 *            est le no de la chaise du dealer
	 */
	public abstract void setDealer(int chaise);

	/**
	 * permet d'afficher ou cacher le montant mise
	 * 
	 * @param NoChaise
	 *            est le No de la chaise
	 * 
	 * @param montant
	 *            est le montant mise
	 * @param visible
	 *            permet de l'afficher ou non
	 */
	public abstract void setMontantMise(int chaise, double montant,
			boolean visible);

	/**
	 * permet d'afficher le montant mise
	 * 
	 * @param chaise
	 *            est le no du joueur
	 * @param montant
	 *            est le montant mise
	 */
	public abstract void setMontantRestant(int chaise, double montant);

	/**
	 * permet de definir le temps du timer pour le temps de jeu du client
	 * 
	 * @param temps
	 *            est le temps en secondes qu'il a pour jouer
	 */
	public abstract void setTimer(int temps);

	/**
	 * permet de demarrer le timer
	 */
	public abstract void startTimer();

	/**
	 * permet de reinitialiser la table a la fin du tour
	 */
	public abstract void tourTermine();

	/**
	 * permet d'enlever les cartes de la main du joueur
	 */
	public abstract void retirerCartesJoueur();

	/**
	 * permet d'enlever de la table les cartes du flop,turn et river
	 */
	public abstract void retirerCartes();

	/**
	 * permet de retirer toutes les cartes des joueurs
	 */
	public abstract void retirerToutesLesCartesSurTable();

	/**
	 * permet de modifier le pot de la table
	 * 
	 * @param pot
	 *            est le montant du pot
	 * @param visible
	 *            est true si le pot est visible
	 */
	public abstract void setPot(double pot, boolean visible);

	/**
	 * permet de definir le controlleur de la fenetre
	 * 
	 * @param controlleur
	 *            de la fenetre
	 */
	public abstract void setControlleur(Controlleur controlleur);

	/**
	 * permet d'afficher les cartes d'un joueur
	 * 
	 * @param NoJoueur
	 *            est le joueur en question
	 * @param carte1
	 *            est le nom de la carte 1
	 * @param carte2
	 *            est le nom de la carte 2
	 */
	public abstract void setCartesJoueur(int NoJoueur, String string,
			String string2);

	/**
	 * permet d'afficher la demmande de solde
	 * 
	 * @param solde
	 *            est le montant maximal
	 */
	public abstract void demmandeSolde(double solde);

	/**
	 * permet d'afficher des informations
	 * 
	 * @param info
	 *            est l'information a afficher
	 * @param titre
	 *            est le titre du message a afficher
	 */
	public abstract void messageResultat(String info, String titre);

	/**
	 * permet de reprendre le message de resultat
	 * 
	 * @return le message de resultat
	 */
	public abstract String getMessageResultat();

	/**
	 * permet de retirer les cartes d'un joueur
	 * 
	 * @param NoJoueur
	 *            est le joueur en question
	 */
	public abstract void retirerCartesJoueur(int NoJoueur);

	/**
	 * permet d'avoir le nombre de cartes qu'il y a sur la table
	 * 
	 * @return le nombre de cartes qu'il y a sur la table
	 */
	public abstract int getNbCartes();

	/**
	 * permet de demander au joueur d'entrer le solde qu'il veut pour jouer a la
	 * table
	 * 
	 * @param min
	 *            est le solde minimum possible
	 *@param max
	 *            est le solde maximum possible
	 */
	public abstract void demandeSolde(double d, double e);
}
